package com.neusoft.yiyang.customer.service;

import com.neusoft.yiyang.common.entity.bed.Bed;
import com.neusoft.yiyang.common.entity.customer.Customer;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.neusoft.yiyang.common.entity.customer.vto.CheckInData;
import com.neusoft.yiyang.common.entity.customer.vto.CustomerWithTagBed;

import java.util.List;
import java.util.Map;

public interface CustomerService {

    // 客户入住登记
    void registerCustomer(Customer customer);

    // 根据ID获取客户信息
    Customer getCustomerById(Integer customerId);

    // 获取所有客户信息（未被删除）
    List<Customer> getAllCustomers();

    // 查询客户信息（支持根据姓名、类型、饮食标签、健康管家等多条件组合查询）
    List<Customer> searchCustomers(String customerName, Integer customerType, Integer dietTagId, Integer caretakerId, String idCard);

    // 分页查询客户信息
    Page<Customer> pageQuery(Page<Customer> page, String customerName, Integer customerType, Integer careLevelId);

    // 更新客户信息
    void updateCustomer(Customer customer);

    // 删除客户（逻辑删除）
    void deleteCustomer(Integer customerId);

    // 为客户分配护工
    void assignCaretaker(Integer customerId, Integer caretakerId);

    // 设置客户护理等级
    void setCareLevel(Integer customerId, Integer careLevelId);

    // 获取需要生成任务的客户列表（供task-service调用）
    List<Customer> getCustomersWithCaretaker();

    // 设置客户饮食标签
    void assignDietTag(Integer customerId, Integer dietTagId);

    // 移除客户饮食标签
    void removeDietTag(Integer customerId);

    // 获取客户的饮食标签
    Integer getDietTagByCustomerId(Integer customerId);

    List<Customer> getCustomerByBed(List<Bed> beds);

    List<Customer> getCustomerHasBed();

    void changeBed(Integer customerId, Integer bedId);

    List<CustomerWithTagBed> getCustomerByUserId(Integer userId);

    Customer getCustomerByIdCard(String idCard);

    List<Map<String, Object>> getCustomersByCaretakerId(Integer caretakerId);

    //获取所有老人
    List<Customer> selectAllCustomer();

    void addCustomerExpected(Customer customer);

    List<Customer> getAllCustomersExpected();

    void editCustomerExpected(Customer customer);

    void deleteCustomerExpected(Integer customerId);

    void confirmCheckIn(CheckInData checkInData);

    Map<String, Integer> getBedFreeStatus();
}
